iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Modern Web

致 JavaScript 開發者的 Functional Programming 新手指南系列 第 17

Day 17:什麼是純函式 ?(5):宣告式程式設計

  • 分享至 

  • xImage
  •  

在自己學習程式語言時,不斷會在技術文件或是技術書籍中看到以下關鍵字,凡舉:「物件導向設計(Object-oriented programming,常縮寫為 OOP)」、「命令式程式設計(Imperative programming)」 與「宣告式程式設計(Declarative programming)」。

對了,現在我們可能也更常見「函式程式設計(Functional programming)」這個關鍵字了。

對當初的自己來說,像極了遇到冷僻詞時,但去查找字典一個字也看不懂的狀況。

但等到自己對於 JavaScript 這門語言的熟悉程度越來越高,我慢慢可以理解這些設計模式的重要性,他們不僅聽起來很酷,但同時也能幫助我們讓寫程式時有個更「具體」的流程可以參考。

在先前的章節,我們不斷重複強調 Immutable Data 對前端開發的重要性,也推薦大家使用 Pure 的函式,更嚴謹地說,在 FP 中我們只使用純函式,這是為什麼呢?

了解了 JavaScript 各式各樣的特性及純函式的特性後,我們終於能來討論所謂「命令式程式設計」與「宣告式設計」這個議題了!,這個章節就讓我們好好聊聊這兩個常見的軟體設計模式吧!

命令式程式設計

命令式程式設計主要是使用陳述式的方式來進行程式碼的撰寫,著名的相關設計模式就是物件導向程式設計,常見的語言像是:C 語言及 Java,這些語言會透過建立物件的方式來管理程式碼、改變程式碼的狀態。

這些語言的共通性在於:他們都是強型別,通常會針對物件建立介面(Interface),來控管物件的方法、取得及覆寫的方式。

如果大家還記得 JavaScript 的特性的話,會發現 JavaScript 雖然參考了物件導向設計的概念,卻因為是弱型別、自動轉型的關係,我們沒有辦法透過建立介面去嚴謹控制控制物件狀態的型別,這也是為什麼我們常在網路上看到許多開發者說:「原生 JavaScript 的物件導向設計只有皮毛」的原因。

於是很多開發者為了讓 JavaScript 撰寫的更加嚴謹,就會導入 TypeScript 這門語言,讓 JavaScript 的型別變得更加嚴謹,也能透過定義介面的方式來限制資料更改方式。

那既然命令式程式設計並不那麼適合純的 JavaScript ,那麼該怎麼辦呢?此時我們可以透過宣告式的程式設計來解決 JavaScript 不那麼嚴謹的問題。

宣告式程式設計

宣告式程式設計是一個與命令式程式設計很不一樣的設計模式,在宣告式程式設計中,我們只使用 1表達式來進行程式碼的撰寫。

咦?聽起來是不是很熟悉?

沒有錯!FP 就是宣告式程式設計的一種,我們透過使用純函式來嚴格限制函式的輸入與輸出,透過這樣的方式,函式最終產生的結果絕對會與我們所輸入的內容,也就是參數有所關係。

經過先前的了解,由於純函式要確保輸出的可預期性,及降低錯誤的產生,純函式的設計原理有諸多的限制,如此才能保證「輸出的結果一致」的結果。

經過先前的章節介紹,有沒有覺得宣告式的程式設計與 FP 更加平易近人了呢?

其實我們可以將純函式看作是一種宣告式程式設計的實踐,而 Impure function 就像是實踐命令式程式設計,然而我們知道 JavaScript 本質上並不嚴謹,避免 Impure function 可以讓我們避免掉許多的問題。

到這個章節為止,我們對純函式的介紹告一個段落,接下來我們就稍作休息,來複習一下目前為止都聊了些什麼吧,我們下個章節見!

參考資料:

  1. WikiPedia: Functional Programming
  2. WikiPedia: Imperative programming
  3. WikiPedia: Declarative programming

上一篇
Day 16:什麼是純函式 ?(4):Impure Function
下一篇
Day 18:什麼是純函式 ?(5):結語
系列文
致 JavaScript 開發者的 Functional Programming 新手指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言